
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

public class CalculadoraImpl extends UnicastRemoteObject implements CalculadoraIntf {

    DivisaoIntf server_calc_Div = null;
    MultiplicacaoIntf server_calc_Mult = null;

    public CalculadoraImpl(String serverDiv_Url, String serverMult_Url) throws RemoteException, NotBoundException, MalformedURLException {
        super();

        server_calc_Div = (DivisaoIntf) Naming.lookup("//" + serverDiv_Url);
        System.out.println("Lookup Servidor Especializado de Divisão Ok.");

        server_calc_Mult = (MultiplicacaoIntf) Naming.lookup("//" + serverMult_Url);
        System.out.println("Lookup Servidor Especializado de Multiplicação Ok.");
    }

    @Override
    public double soma(double num1, double num2) throws RemoteException {
        System.out.println("Invocação Remota de SOMA..  " + num1 + " + " + num2);
        return num1 + num2;
    }

    @Override
    public double subtrai(double num1, double num2) throws RemoteException {
        System.out.println("Invocação Remota de SUBTRAÇÃO..  " + num1 + " - " + num2);
        return num1 - num2;
    }

    @Override
    public double multiplica(double num1, double num2) throws RemoteException {
        System.out.println("Invocação Remota de MULTIPLACAÇÃO..  " + num1 + " * " + num2);
        return server_calc_Mult.Multiplica(num1, num2);
    }

    @Override
    public double divide(double num1, double num2) throws RemoteException, RemoteMsgEx {
        System.out.println("Invocação Remota de DIVISÃO..  " + num1 + " / " + num2);
        return server_calc_Div.Divide(num1, num2);
    }
}